.model small
.data
   lie dw ?
   hang dw ?
.code
start:
   mov ax,@data
   mov ds,ax
main proc far
   mov ah,0fh
   int 10h
   push ax
   mov ah,00h
   mov al,04h
   int 10h
   mov ah,0bh
   mov bh,01h
   mov bl,01h
   int 10h

   mov lie,180
   mov cx,120
   mov dx,60
   call dot_draw1
   mov lie,160
   mov cx,100
   mov dx,80
   call dot_draw1
   mov lie,160
   mov cx,100
   mov dx,140
   call dot_draw1

   mov hang,140
   mov dx,80
   mov cx,100
   call dot_draw2
   mov hang,140
   mov dx,80
   mov cx,160
   call dot_draw2
   mov hang,120
   mov dx,60
   mov cx,180
   call dot_draw2

   mov hang,80
   mov dx,60
   mov cx,120
   call dot_draw3
   mov hang,80
   mov dx,60
   mov cx,180
   call dot_draw3
   mov hang,140
   mov dx,120
   mov cx,180
   call dot_draw3
   mov ah,1
   int 21h
   pop ax
   mov ah,00h
   int 10h
   mov ah,4ch
   int 21h
main endp

dot_draw1 proc
  back1:
   mov ah,0ch
   mov al,1
   mov bh,0
   int 10h
   inc cx
   cmp cx,lie
   jnz back1
   ret
dot_draw1 endp
dot_draw2 proc
  back2:
   mov ah,0ch
   mov al,1
   mov bh,0
   int 10h
   inc dx
   cmp dx,hang
   jnz back2
   ret
dot_draw2 endp
dot_draw3 proc
  back3:
   mov ah,0ch
   mov al,1
   mov bh,0
   int 10h
   inc dx
   dec cx
   ;进行修改，避免出现cx为负数的情况

   ;cmp cx,0
   ;jl end_dot_draw3

   cmp dx,hang
   jnz back3
   ret
;end_dot_draw3:
   ;ret
dot_draw3 endp
        end start